--机器人测试
-----

package.cpath = "./skynet/luaclib/?.so;".. package.cpath
package.path = "./skynet/lualib/?.lua;./app/common/lib/?.lua;./testclient/?.lua;" .. package.path

if _VERSION ~= "Lua 5.3" then
	error "Use lua 5.3"
end

--启动需要参数2个参数：游戏名，机器人数
--eg: lua robottest.lua sgj 100
local args = table.pack(...)

-----------

local nettool = require "nettool"
local socket = require "client.websocket"

--服务器的ip，端口
local ip = args[4] or "127.0.0.1"
local port = tonumber(args[5]) or 8191

local RobotMagr = {}
local fork_list = {}

--上次添加机器人时间，每隔3s添加一次机器人
--分批次加入，减少服务器压力,每次添加50个
local last_add_time = 0

-----------------

--开启一个协程
local function fork(func, ...)
	local co = coroutine.create(func)
    coroutine.resume(co,...)
    return co
end

--------------

--添加机器人到游戏
function RobotMagr.add_robot_to_game(robot_num)
    local now = os.time()
    if now - last_add_time < 3 then
        return robot_num
    end

    last_add_time = now
    robot_num = robot_num or 10
    for i = 1,50 do
        if (i > robot_num) then return 0 end
        local co = fork(nettool.login, ip, port)
        table.insert(fork_list,co)
    end

    return (robot_num-50)
end

--运行机器人
function RobotMagr.run(num)
    local cur_num = num

    --不断执行
    while true do
        if cur_num > 0 then
            cur_num = RobotMagr.add_robot_to_game(cur_num)
        end

        local isok = false
        local is_empty = true
        for k,co in pairs(fork_list) do
            is_empty = false
            local status = coroutine.status(co)
            if status == "dead" then
                fork_list[k] = nil
            elseif status == "suspended" then
                local status,result = coroutine.resume(co)
                if result then isok = true end
            end
        end
        if is_empty then 
            break
        elseif not isok then
            socket.usleep(10000)
        else
            socket.usleep(100)
        end
    end

    print("\n\n---end----")
end

--必须先初始化
--入参1：游戏名，lhj,sgj,bm,fqzs等
--入参2：是否显示打印，默认false
nettool.init(args[1] or "sgj",args[3])

--运行机器人
--入参：机器人数量,默认10个
RobotMagr.run(tonumber(args[2]))

